#include <stdio.h>

#include "Thread.hpp"

// 传参

void echo(int arg){
    std::cout << arg << std::endl;
}


int main(){
    // 传 1个int 后面可以传class
    ThreadModule::Thread<int> t(echo, 10);

    t.Start();

    t.Join();
    return 0;
}






// // 多线程的写法
// #include <stdio.h>
// #include <unistd.h>
// #include <unordered_map>
// #include <memory> //for shared_ptr

// #include "Thread.hpp"

// // using thread_ptr_t = ThreadModule::Thread::
// #define NR_THREAD 10

// int main(){
//     std::unordered_map<std::string, std::shared_ptr<ThreadModule::Thread>> threads;

//     for(int i = 0; i < NR_THREAD; ++i){
//         std::shared_ptr<ThreadModule::Thread> thread_ptr = std::make_shared<ThreadModule::Thread>([](){
//             while(true)
//             {
//                 std::cout << "hello world" << std::endl;
//                 sleep(1);
//             }
//         });

//         threads[thread_ptr->Name()] = thread_ptr;
//     }

//     for(std::pair<std::string, std::shared_ptr<ThreadModule::Thread>> t : threads)
//     {
//         t.second->Start();        
//     }

//     sleep(3);
//     for(std::pair<std::string, std::shared_ptr<ThreadModule::Thread>> t : threads)
//     {
//         t.second->Stop();        
//     }
//     std::cout << "Thread stoped" << std::endl;
    
//     sleep(3);
//     for(std::pair<std::string, std::shared_ptr<ThreadModule::Thread>> t : threads)
//     {
//         t.second->Join();        
//     }
//     std::cout << "Thread Joined" << std::endl;


//     return 0;
// }



// #include "Thread.hpp"


// int main(){

//     ThreadModule::Thread t([](){
//         while(true){
//             std::cout << "hello world" << std::endl;
//             sleep(1);
//         }

//     });

//     t.Start();
//     std::cout << t.Name() << "is running" << std::endl;

//     t.Join();
//     return 0;
// }

// #include "Thread.hpp"
// #include <iostream>
// #include <unistd.h> // For sleep

// int main() {
//     ThreadModule::Thread t([]() {
//         for (int i = 0; i < 10; ++i) { // 限制输出次数
//             std::cout << "hello world" << std::endl;
//             sleep(1); // 每秒输出一次
//         }
//     });

//     if (!t.Start()) { // 启动线程并检查返回值
//         std::cerr << "Failed to start thread" << std::endl;
//         return 1;
//     }

//     std::cout << t.Name() << " is running" << std::endl;

//     sleep(5);
//     t.Stop();

//     if (t.IsJoinable()) {
//         std::cout << t.Name() << " is joinable and running" << std::endl;
//     }

//     t.Join(); // 等待线程结束
//     return 0;
// }
